#ifndef _NODO_B_MAS_H_
#define _NODO_B_MAS_H_

/**********************************************************************
 * nodo_b_mas.h
 * 
 * Descripcion: Esta clase representa un nodo del set secuencial de un arbol B+.
 * Hereda de Nodo. Se debe crear pasandole una ref a un bloque
 * por param y luego utilizar sus metodos para ingresar u obtener
 * datos del nodo en el bloque.
 * El formato del nodo es:
 * [esp_libre:uint, nivel:ushort, siguiente:ushort, (clave:TipoDato, dato: TipoDato)+]
*********************************************************************/

#include "nodo.h"

class NodoBMas : public Nodo {
			
	public:
		
		NodoBMas (Bloque* bloque, TipoDato* clave_base, TipoDato* dato_base);
		
		NodoBMas(Bloque * bloque);
		
		NodoBMas(Bloque * bloque, TipoDato* clave_base);
		
		virtual ~NodoBMas() { }
		
		/*
		 * Devuelve el siguiente del nodo. Si no tiene siguiente
		 * devuelve BAD_REF.
		 */
		unsigned short int get_sig_nodo();
		
		/*
		 * Coloca el nuevo siguiente del nodo.
		 */
		void set_sig_nodo(unsigned short int siguiente);
		
		/*
		 * Ingresa el elemento [dato, clave] en el nodo this y desp splitea
		 * ingresando la mitad superior en el nodo pasado como param.
		 */
		void ingresar_con_split(NodoBMas* nodo, TipoDato* clave, TipoDato* dato);
		
		/*
		 * redefinicion del ingresar del padre, para mantener el sigte
		 */
		bool ingresar_elemento(TipoDato* clave, TipoDato* dato);
		
};

#endif
